import { Controller, Get, Headers, Inject, Res, Session, UnauthorizedException } from '@nestjs/common';
import { AppService } from './app.service';
import { JwtService } from '@nestjs/jwt';
import { Response } from 'express';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  
  @Inject(JwtService)
  private jwtService: JwtService;


  @Get('jjj')
     //用户请求携带的 autorization 头部信息               因为注入 response 对象之后，默认不会把返回值作为 body 了，需要设置 passthrough 为 true 才可以。
  jjj(@Headers('authorization') authorization: string,@Res({ passthrough: true}) response: Response) {
     
      if(authorization) {
        try {
          const token = authorization.split(' ')[1];
          const data = this.jwtService.verify(token);

          const newToken = this.jwtService.sign({
            count: data.count + 1
          });
          response.setHeader('token', newToken);
          return data.count + 1
        } catch(e) {
          console.log(e);
          throw new UnauthorizedException();  //未授权异常
        }
      } else {
        const token = this.jwtService.sign({
          count: 1
        });

        response.setHeader('token', token);
        return 1;
      }

  }


  @Get('sss')
  sss(@Session() session) {  //@Session()获取当前请求的session对象,若没有会创建。
      console.log(session)
      session.count = session.count ? session.count + 1 : 1;
      return session.count;

      /**字段说明
       * set-cookie: 第一次请求时,服务器会生成放在响应标头,用户会携带,里面就存放着sessionid
       * 
       * Etag 文件唯一标识符, 服务器生成的。(用户判断请求是否过期)
       * Etag客户端下一次请求时,将Etag作为If-None-Match的请求头字段，帮助服务器检测资源是否被修改。
       */
  }


  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}
